import type { ConfigEnv, UserConfig } from "vite";
import type { Options as PWAOptions } from "vite-plugin-pwa";
import type { CommonOptions } from "./CommonOptions";
import type { ArchiverOptions } from "./ArchiverPluginOptions";

/**
 * 应用选项
 */
export interface ApplicationOptions extends CommonOptions {
    /** 开启后，会在打包dist同级生成 dist.zip */
    archiver?: boolean;
    /** 压缩归档插件配置 */
    archiverPluginOptions?: ArchiverOptions;
    /** 开启 gzip | brotli 压缩 */
    compress?: boolean;
    /** 压缩类型 */
    compressTypes?: ("brotli" | "gzip")[];
    /** 在构建的时候抽离配置文件 */
    extraAppConfig?: boolean;
    /** 是否开启html插件  */
    html?: boolean;
    /** 是否开启i18n */
    i18n?: boolean;
    /** 是否开启 importmap CDN  */
    importmap?: boolean;
    /** importmap 插件配置 */
    // importmapOptions?: ImportmapPluginOptions
    /** 是否注入app loading */
    injectAppLoading?: boolean;
    /** 是否注入全局scss */
    injectGlobalScss?: boolean;
    /** 是否注入版权信息 */
    license?: boolean;
    /** 是否开启nitro mock */
    nitroMock?: boolean;
    /** nitro mock 插件配置 */
    // nitroMockOptions?: NitroMockPluginOptions
    /** 开启控制台自定义打印 */
    print?: boolean;
    /** 打印插件配置 */
    // printInfoMap?: PrintPluginOptions["infoMap"]
    /** 是否开启pwa */
    pwa?: boolean;
    /** pwa 插件配置 */
    pwaOptions?: Partial<PWAOptions>;
    /** 是否开启vxe-table懒加载 */
    vxeTableLazyImport?: boolean;
}

export type DefineApplicationOptions = (config?: ConfigEnv) => Promise<{
    application?: ApplicationOptions;
    vite?: UserConfig;
}>;
